#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <stdlib.h>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;

const int MAXLINE = 2560;

//vector< vector <float> > dados_reais;
//std::vector<float> split(string in) {
//    stringstream aux = new stringstream(in);
//    string s;
//    vector<float> w_return;
//    printf("Leitura: %s\n", in);
//    while (getline(aux, s, ';'))
//        w_return.push_back(atof(s.c_str()));
//    return w_return;
//}

void StringExplode(string str, string separator, vector<string>* results) {
    int found;
    found = str.find_first_of(separator);
    while (found != string::npos) {
        if (found > 0) {
            results->push_back(str.substr(0, found));
        }
        str = str.substr(found + 1);
        found = str.find_first_of(separator);
    }
    if (str.length() > 0) {
        results->push_back(str);
    }
}

//int main() {
//    string strOneLine;
//    ifstream myFile("full_data.txt");
//    int sensor;
//    vector<double> blankRow;
//    std::vector< vector <double> > matriz(55, blankRow);
//    double valor;
//    vector<string> r;
//    while (myFile) {
//
//        getline(myFile, strOneLine);
//        StringExplode(strOneLine, ";", &r);
//        //printf("Tamanho: %d ",r.size());
//        if (r.size() > 2) {
//            sensor = atoi(r.at(0).c_str());
//            valor = atof(r.at(2).c_str());
//            matriz[sensor].push_back(valor);
//            printf("Matriz[%d][%d]: %f\n", sensor,matriz[sensor].size(), valor);
//        }
//        r.clear();
//    }
//    myFile.close();
//
//    return 0;
//}
//int main() {
//    int linhas = 1;
//    ifstream inFile("data.txt");
//    ofstream outFile("dados_export.txt");
//    string strOneLine;
//    if (outFile.is_open()) {
//        while (inFile) {
//            getline(inFile, strOneLine);
//            if (linhas == 100) {
//                outFile << strOneLine;
//                outFile << '\n';
//                linhas = 0;
//            }
//            linhas++;
//        }
//        outFile.close();
//    } else cout << "Unable to open file";
//
//
//    inFile.close();
//
//    return 0;
//}

//int main() {
//    int leituras = 1;
//    ifstream inFile("dados.csv");
//    ofstream outFile("dados_export.txt");
//    string strOneLine, sensor, temp, sensor_anterior = "XPTO";
//    if (outFile.is_open()) {
//        while (inFile) {
//            //SEQ
//            getline(inFile, strOneLine, ';');
//            cout << strOneLine << '\n';
//            //SENSOR
//            getline(inFile, sensor, ';');
//            cout << sensor << '\n';
//            //TEMP
//            getline(inFile, temp);
//            cout << temp << '\n';
//            if (sensor.compare(sensor_anterior) == 0) {
//                if (leituras <= 100) {
//                    outFile << temp << ';';
//                    leituras++;
//                }
//
//            } else {
//                outFile << '\n';
//                outFile << temp << ';';
//                sensor_anterior = sensor;
//                leituras = 1;
//            }
//        }
//        outFile.close();
//    } else cout << "Unable to open file";
//
//
//    inFile.close();
//
//    return 0;
//}



int main() {
    int leituras = 10;
    ifstream inFile("data.txt");
    ofstream outFile("full_data.txt");
    std::string strOneLine, sensor, temp, seq, sensor_anterior = "XPTO";

    if (outFile.is_open()) {
        while (inFile) {
            getline(inFile, strOneLine);
            istringstream iss(strOneLine);
            vector<string> tokens;
            copy(istream_iterator<string > (iss), istream_iterator<string > (), back_inserter<vector<string> >(tokens));
            //        vector<string>::const_iterator cii;
            //        for (cii = tokens.begin(); cii != tokens.end(); cii++){
            //            sensor = *cii;
            //            cout << sensor << endl;
            //        }
            if (tokens.size() > 4) {
                seq = tokens.at(2);
                sensor = tokens.at(3);
                temp = tokens.at(4);
            }
            tokens.clear();
            leituras++;
            // LER SÓ DE 30m em 30m
            if ((leituras >= 100)||(atoi(sensor.c_str())==5)||((atoi(sensor.c_str())==15)&&(leituras >10))){
                leituras=1;            
                outFile << sensor << ';' << seq << ';' << temp << ";\n";
            }
        }
        outFile.close();
    } else
        cout << "Unable to open file";

    inFile.close();

    return 0;
}

